export {};

// 泛型工具（函数）的使用

// 1 Partial<Type>

type Props = {
  id: string;
  children: string[];
  obj: {
    name: string;
  };
};

type PartialProps = Partial<Props>;

let obj: PartialProps = {
  id: 'xxx',
};

let obj2: Props = {
  id: '',
  children: ['1', '2'],
  obj: {
    name: '',
  },
};

// 2 Readonly 泛型工具函数的使用

type ReadonlyProps = Readonly<Props>;

let obj3: ReadonlyProps = {
  id: '1',
  children: ['a', 'b'],
  obj: {
    name: 'Jack',
  },
};

// obj3.id

// 但是，如果引用类型。
// obj3.children = ['c']// 错误的
obj3.children.push('c');
// obj3.obj = {name: 'Rose'}
obj3.obj.name = 'Rose';

console.log(obj3.children);
console.log(obj3.obj);

// 3 泛型工具函数 Pick<Type, Keys>

type PickProps = Pick<Props, 'id' | 'children'>;

let obj4: PickProps = {
  id: 'xx',
  children: ['xx'],
};
